// #include <stdio.h>
// #include <stdbool.h>
// #include <assert.h>
// #include <stdlib.h>
//
// /***
//  * 二进制读写
//  * size_t fwrite(void const* _Buffer,size_t* _ElementSize,size_t* _ElementCount,FILE* _Stream): 文件格式化写操作
//  * 1._Buffer: 写入数据的首地址
//  * 2._ElementSize: 每次写入的大小
//  * 3._ElementCount: 几次写入
//  * 4._Stream: 写入文件
//  * 返回值： _ElementCount
//  *
//  *
//  * size_t fread(void const* _Buffer,size_t* _ElementSize,size_t* _ElementCount,FILE* _stream) 文件格式化读操作
//  * 1._Buffer 读到指定内存的首地址
//  * 2._ElementSize 每次读取的大小
//  * 3._ElementCount:读取的份数
//  * 4. _Stream: 读取文件
//  * 返回值： _ElementCount
//  */
//
// struct Person
// {
//     char name[20];
//     int age;
//     int num;
// };
//
// void test()
// {
//     //二进制读写打开方式一定要带b
//     struct Person array[3] = {{"xoapwu",18,12},{"xoapwu1",15,12},{"xoapwu2",19,12}};
//
//     FILE* f = fopen("tt.dat","wb");
//     assert(f);
//
//     // for (int i=0;i<3;i++)
//     // {
//     //     fwrite(array+i,sizeof(struct Person),1,f);
//     // }
//
//     //一次性写3个数据
//     fwrite(array,sizeof(struct Person),3,f);
//     fclose(f);
//     FILE* read=fopen("oo.dat","rb");
//     assert(read);
//
//     struct Person temp;
//     // while (1)
//     // {
//     //     int result = fread(&temp,sizeof(struct Person),1,read);
//     //     printf("%d\n",result); //成功读取的程序个数
//     //     if (feof(read))
//     //     {
//     //         break;
//     //     }
//     //     printf("%s\t%d\t%d\t\n",temp.name,temp.age,temp.num);
//     // }
//
//     while (fread(&temp,sizeof(struct Person),1,read))
//     {
//         printf("%s\t%d\t%d\t\n",temp.name,temp.age,temp.num);
//     }
//     fclose(read);
//
//
//
//
// }
//
// void test_demo()
// {
//     struct Person array[3] = {{"xoapwu",18,12},{"xoapwu1",15,12},{"xoapwu2",19,12}};
//
//     FILE* f = fopen("oo.dat","wb");
//     assert(f);
//     int count=3;
//     //在数据库之前先写个大小
//     fwrite(&count,sizeof(int),1,f);
//     fwrite(array,sizeof(struct Person),3,f);
//     fclose(f);
//
//     FILE* read=fopen("oo.dat","rb");
//     assert(read);
//
//     int num = 0;
//     fread(&num,sizeof(int),1,read);
//     struct Person* parr = (struct Person *) malloc(sizeof(struct Person)* num);
//     assert(parr);
//     fread(parr,sizeof(struct Person),num,read);
//     for (int t=0;t<num;t++)
//     {
//         printf("%s\t%d\t%d\t\n",parr[t].name,parr[t].age,parr[t].num);
//     }
//     fclose(read);
// }
//
// //操作文件指针的函数 文件定位 文件还原位置
// /***
//  * void rewind(FILE* _Stream): 把文件指针还原到文件开头
//  * _Stream: 还原的文件指针
//  *
//  * void seek(FILE* _Stream,long _Offset,int _Origin): 移动文件指针
//  * 1._Stream: 移动的文件指针
//  * 2._Offset: 相对于参照点的偏移量
//  * 3._Origin: 参照点
//  *   1. SEEK_SET: 文件开头
//  *   2，SEEK_CUR: 当前位置
//  *   3. SEEK_END: 文件结束
//  *   通常适用于二进制读写中实现指定数据读写
//  *long ftell(FILE *_Stream) 统计文件指针移动字节数
//  *
//  *统计文件大小
//  *
// */
// void test_two()
// {
//     FILE* f = fopen("oo.dat","r");
//     fseek(f,0L,SEEK_END);
//     int  size = ftell(f);
//     printf("%d\n",size);
// }
//
// void test_three()
// {
//     struct Person array[3] = {{"xoapwu",18,12},{"xoapwu1",15,12},{"xoapwu2",19,12}};
//
//     FILE* f = fopen("oo.dat","rwb");
//     assert(f);
//     int count=3;
//     //在数据库之前先写个大小
//     fwrite(&count,sizeof(int),1,f);
//     fwrite(array,sizeof(struct Person),3,f);
//
//     fflush(f);
//     rewind(f);
//
//     int num = 0;
//     fread(&num,sizeof(int),1,f);
//     struct Person* parr = (struct Person *) malloc(sizeof(struct Person)* num);
//     assert(parr);
//     fread(parr,sizeof(struct Person),num,f);
//     for (int t=0;t<num;t++)
//     {
//         printf("%s\t%d\t%d\t\n",parr[t].name,parr[t].age,parr[t].num);
//     }
//     fclose(f);
// }
//
// //文件重定向 操作文件指针函数
// //程序的输入和输出定向到文件
// //输入重定向
// //输出重定向
// //输入和输出的定向
// //FILE* freopen(const char* url,const char* mode,FILE* fp);
// void test_four()
// {
//     // //程序所有结果都不会显示
//     // FILE * output = freopen("output.txt","w",stdout);
//     // int a = 1,b=2;
//     // printf("%d\t%d\n",a,b);
//     // //定向回来
//     // output=freopen("CON","w",stdout);
//     // printf("ilove you \n");
//     //
//     // //标准输出重定向
//     //
//     //
//
//     // fclose(output);
//
//     int a=1,b=2;
//
//     // FILE* f = freopen("a.txt","r",stdin);
//
//     scanf("%d%d",&a,&b);
//     printf("%d-%d\n",a,b);
//
//
// }
//
// //主函数参数 命令行参数
// int main(int argc,char* argv[])
// {
//     // test_four();
//     //cmd命令
//
//     for (int i=0;i<argc;i++)
//     {
//         printf("%s\n",argv[i]);
//     }
//
//     return 0;
// }